package job.work.mapper.system;

import job.work.domain.system.entity.pojo.model.SystemUser;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;

import java.math.BigDecimal;
import java.util.List;

@Repository
public interface SystemMapper extends Mapper<SystemUser> {

    @Select("select * from dec_system where username = #{username}")
    SystemUser findByUsername(String username);

    @Select("select * from dec_system where phone = #{mobile}")
    SystemUser findByMobile(String mobile);

    /**
     * 根据ID 查询用户信息
     * @param id  用户Id
     * @return 用户信息
     */
    @Select("select * from dec_system where id = #{id}")
    SystemUser findById(Long id);
    /**
     * 根据ID 查询用户信息
     * @param roleId  角色ID
     * @return 用户信息
     */
    @Select("select * from dec_system where role_id = #{roleId}")
    List<SystemUser> findByRoleId(Long roleId);
    /**
     * 根据ID 查询用户数量
     * @param roleId  角色ID
     * @return 用户数量
     */
    @Select("select count(*) from dec_system where role_id = #{roleId}")
    int findByRoleIdCont(Long roleId);

    /**
     * 根据用户ID更新用户密码 并且把需要修改密码的字段改为0
     * @param id 用户Id
     * @param password 用户密码
     *
     */
    @Update("update dec_system set password = #{password},type = 0 where id = #{id}")
    void updatePassword(@Param("id") Long id, @Param("password") String password);

    /**
     * 根据用户ID更新用户角色
     * @param id 角色Id
     * @param roleId  角色ID
     */
    @Update("update dec_system set roleId = #{roleId} where id = #{id}")
    void updateRoleId(Long id, Long roleId);

    /**
     * 根据用户ID更新用户状态
     * @param id 用户Id
     * @param status 用户状态
     *
     */
    @Update("update dec_system set status = #{status} where id = #{id}")
    void updateStatus(@Param("id") Long id, @Param("status") Integer status);

    /**
     * 根据用户ID更新用户钱包
     * @param id 用户Id
     * @param wallet 用户钱包
     *
     */
    @Update("update dec_system set wallet = #{wallet} where id = #{id}")
    void updateWallet(@Param("id") Long id, @Param("wallet") BigDecimal wallet);


    /**
    * 查询用户总量
    */
    @Select("select count(*) from dec_system")
    Long selectAllCount();


    @Update("update dec_system set wallet = wallet + #{payAmount} where id = #{id} and wallet + #{payAmount}>=0")
    Integer deductWallet(Long id, BigDecimal payAmount);
}
